import { defineStore } from 'pinia';

export const useAuthStore = defineStore('auth', {
  state: () => ({
    token: (() => {
      // 优先从localStorage获取，如果没有则从sessionStorage获取
      return localStorage.getItem('token') || sessionStorage.getItem('token') || null;
    })(),
    user: (() => {
      try {
        // 优先从localStorage获取，如果没有则从sessionStorage获取
        const userStr = localStorage.getItem('user') || sessionStorage.getItem('user');
        return userStr ? JSON.parse(userStr) : null;
      } catch (error) {
        console.error('解析用户信息失败:', error);
        localStorage.removeItem('user');
        sessionStorage.removeItem('user');
        return null;
      }
    })(),
    failedAttempts: 0,
  }),
  actions: {
    setToken(token) {
      this.token = token;
    },
    setUser(user) {
      this.user = user;
      // 如果用户信息更新，也更新存储
      if (user) {
        // 根据当前存储位置选择更新位置
        if (localStorage.getItem('token')) {
          localStorage.setItem('user', JSON.stringify(user));
        } else if (sessionStorage.getItem('token')) {
          sessionStorage.setItem('user', JSON.stringify(user));
        }
      }
    },
    updateUserInfo(userInfo) {
      // 更新用户信息，保留原有的token等认证信息
      if (this.user) {
        this.user = { ...this.user, ...userInfo };
        // 根据当前存储位置选择更新位置
        if (localStorage.getItem('token')) {
          localStorage.setItem('user', JSON.stringify(this.user));
        } else if (sessionStorage.getItem('token')) {
          sessionStorage.setItem('user', JSON.stringify(this.user));
        }
      }
    },
    incrementFailedAttempts() {
      this.failedAttempts++;
      if (this.failedAttempts >= 5) {
        console.log('账户已锁定30分钟');
      }
    },
    logout() {
      this.token = null;
      this.user = null;
      // 清除所有存储
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      sessionStorage.removeItem('token');
      sessionStorage.removeItem('user');
    },
    // 强制清除所有登录状态（用于切换账号）
    forceLogout() {
      this.token = null;
      this.user = null;
      // 清除所有可能的存储
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      sessionStorage.removeItem('token');
      sessionStorage.removeItem('user');
      // 清除所有localStorage和sessionStorage（可选，更彻底）
      // localStorage.clear();
      // sessionStorage.clear();
    },
  },
});
